package com.itheima.springbootwebtlias.controller;

import com.itheima.springbootwebtlias.pojo.Dept;
import com.itheima.springbootwebtlias.pojo.Result;
import com.itheima.springbootwebtlias.service.DeptService;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.util.List;

/*
* 部门 处理器：处理部门相关请求
* */
@Slf4j // lombok提供的功能注解：自动生成日志对象Logger log
@RequestMapping("/depts")
@RestController
public class DeptController {
    // 创建日志对象Logger
    //private static final Logger log = LoggerFactory.getLogger(DeptController.class);

    @Autowired
    private DeptService deptService;

    // 查询部门列表
    // @RequestMapping(value="/depts" , method = RequestMethod.GET)
    @GetMapping
    public Result selectAll() {
        log.info("查询所有部门信息，请求参数无");

        List<Dept> deptList = deptService.list();

        return Result.success(deptList);
    }

    // 删除部门列表
    @DeleteMapping
    public Result removeById(@RequestParam Integer id) {
        log.info("删除指定{}信息，请求参数：{}","部门", id);
        // 1.接受请求参数：kv
        // 方式二：框架，直接定义变量接受（请求参数数量较少）
        // 方式三：框架，直接定义对象接受（请求参数数量较多）
        // 方式四：框架，定义Mapper对象（请求参数数量较多且没有合适的实体对象）
        // 判断部门下是否有人
        deptService.removeById(id);
        return Result.success();
    }

    // 添加部门
    @PostMapping
    public Result insert(@RequestBody Dept dept) {
        log.info("添加部门信息，请求参数：{}", dept);
        // 1.接收请求参数：json（请求体中）
        // json接受参数：@RequestBody + 定义实体对象
        dept.setCreateTime(LocalDateTime.now());
        dept.setUpdateTime(LocalDateTime.now());
        deptService.save(dept);
        return Result.success();
    }

    // 修改部门
    // 1.查询回响
    @GetMapping("/{id}")
    public Result findById(@PathVariable Integer id) {
        log.info("查询回显部门信息，请求参数：{}", id);
        // 1.接受请求参数：path路径参数，作为请求路径一部分
        //请求路径参数方式：@PathVariable 定义变量
        Dept dept = deptService.getById(id);
        return Result.success(dept);
    }

    // 2.修改
    @PutMapping
    public Result update(@RequestBody Dept dept) {
        log.info("修改部门信息，请求参数：{}", dept);
        // 1。接受请求参数：json（请求体中）
        // json接受参数：@RequestBody + 定义实体对象/Map对象
        dept.setUpdateTime(LocalDateTime.now());
        deptService.updateById(dept);
        return Result.success();
    }
}
